/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package Compresor;

import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.util.*;
import java.util.Map.Entry;
import java.util.logging.Level;
import java.util.logging.Logger;

/**
 *
 * @author asc
 */
public class LexicalAnalisis
{
    
    FileInputStream entrada;
    String nomFichero;
    HashMap<String , Integer> probabilidades;

    public LexicalAnalisis( String nombreFichero )
    {
        nomFichero = nombreFichero; 
        probabilidades = new HashMap<String , Integer>();     
    }

    void AnalizeInput1Char()
    {
        inicializaFichero();
        try
        {
            String codigo;
            while ( entrada.available() != 0 )
            {
                codigo = Character.toString((char) entrada.read());
                if ( probabilidades.containsKey(codigo) )
                {
                    probabilidades.put(codigo , probabilidades.get(codigo) + 1);
                }
                else
                {
                    probabilidades.put(codigo , 1);
                }
                //System.out.print(codigo);
            }

            if(probabilidades.size()<2)
            {
                probabilidades.put("NULO",0);
            }
        }
        catch ( IOException ex )
        {
            Logger.getLogger(LexicalAnalisis.class.getName()).log(Level.SEVERE , null , ex);
        }
        cierraFichero();
    }

    public HashMap<String, Integer> getProbabilidades() {
        return probabilidades;
    }
    
    public void inicializaFichero()
    {
        try 
        {
            entrada = new FileInputStream(nomFichero);
        } 
        catch (FileNotFoundException ex) 
        {
            Logger.getLogger(LexicalAnalisis.class.getName()).log(Level.SEVERE, null, ex);
        }
    }
    
    public void cierraFichero()
    {
        try 
        {
            entrada.close();
        }
        catch (IOException ex) 
        {
            Logger.getLogger(LexicalAnalisis.class.getName()).log(Level.SEVERE, null, ex);
        }
    }
    
    public int Final()
    {
        try 
        {
            return entrada.available();
        } 
        catch (IOException ex) 
        {
            Logger.getLogger(LexicalAnalisis.class.getName()).log(Level.SEVERE, null, ex);
        }
        return 0;
    }
    
    public char getNextChar()
    {
        try 
        {
            return (char)entrada.read();
        } 
        catch (IOException ex) 
        {
            Logger.getLogger(LexicalAnalisis.class.getName()).log(Level.SEVERE, null, ex);
        }
        return 0;
    }
}
